package com.example.base_lib

import android.graphics.Color
import android.graphics.Rect
import android.graphics.drawable.ColorDrawable
import android.os.Build
import android.os.Bundle
import android.view.*
import androidx.annotation.LayoutRes
import androidx.appcompat.app.AppCompatActivity
import androidx.databinding.DataBindingUtil
import androidx.databinding.ViewDataBinding


abstract class BaseActivity<T : ViewDataBinding> : AppCompatActivity() {
    val TAG: String = "MyTest"//javaClass.simpleName // 使用当前类的简单名称作为日志标签
    lateinit var binding: T

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
//        setWindowsActivity()

        setStatuBarTrans()
        // Hide the Action Bar
        supportActionBar?.hide()

        window.apply {
            statusBarColor = Color.TRANSPARENT
            navigationBarColor = Color.TRANSPARENT
        }
        window.decorView.systemUiVisibility = (
                View.SYSTEM_UI_FLAG_LAYOUT_STABLE or
                        View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                )

        binding = DataBindingUtil.setContentView(this, getLayoutId())
        binding.lifecycleOwner = this
        onInit()
    }

    private fun setStatuBarTrans() {
        // 获取 Window 对象
        val window: Window = window
// 设置状态栏和导航栏为透明
//        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
//            // 在 Android 11 及以上版本使用 WindowInsetsController
//            val insetsController: WindowInsetsController = window.getInsetsController()
//            if (insetsController != null) {
//                insetsController.setSystemBarsAppearance(
//                    WindowInsetsController.BEHAVIOR_SHOW_BARS_BY_SWIPE,  // 显示状态栏和导航栏
//                    WindowInsetsController.APPEARANCE_LIGHT_STATUS_BARS or  // 浅色状态栏图标
//                            WindowInsetsController.APPEARANCE_LIGHT_NAVIGATION_BARS // 浅色导航栏图标
//                )
//                insetsController.setSystemBarsColor(Color.TRANSPARENT) // 设置状态栏和导航栏颜色为透明
//            }
//        } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
//            // 在 Android 5.0 及以上版本使用旧版方法
//            window.getDecorView().setSystemUiVisibility(
//                View.SYSTEM_UI_FLAG_LAYOUT_STABLE or  // 确保布局稳定
//                        View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or  // 充满屏幕，覆盖状态栏
//                        View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION or  // 充满屏幕，覆盖导航栏
//                        View.SYSTEM_UI_FLAG_FULLSCREEN or  // 隐藏状态栏
//                        View.SYSTEM_UI_FLAG_HIDE_NAVIGATION // 隐藏导航栏
//            )
//            window.setStatusBarColor(Color.TRANSPARENT) // 设置状态栏为透明
//            window.setNavigationBarColor(Color.TRANSPARENT) // 设置导航栏为透明
//        }
    }

    private fun setWindowsActivity() {
        // 设置窗口模式
        window.setFlags(
            WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,
            WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS
        )
        // 设置窗口的大小和位置
        // 设置窗口的大小和位置
        val params = window.attributes
        params.width = resources.getDimensionPixelSize(R.dimen.windows_width) // 设置宽度为300像素

        params.height = 300 // 设置高度为300像素

        // 如果您想要指定位置，可以使用以下两行代码
        // params.x = 100; // 设置窗口在屏幕上的横向偏移量
        // params.y = 100; // 设置窗口在屏幕上的纵向偏移量
        window.attributes = params
        // 设置窗口背景为透明
        window.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
        // 允许触摸事件透传到后面的窗口
        window.setFlags(
            WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,
            WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
        )
    }

    /**
     * This method should be implemented by subclasses to provide the layout resource ID.
     */
    @LayoutRes
    abstract fun getLayoutId(): Int

    /**
     * This method can be implemented by subclasses for additional initialization.
     */
    abstract fun onInit()

    override fun dispatchTouchEvent(event: MotionEvent): Boolean {
        // 获取触摸点的坐标
        val x = event.x
        val y = event.y

        // 判断触摸点是否在Activity的区域内
        val activityRect = Rect()
        window.decorView.getDrawingRect(activityRect)
        if (!activityRect.contains(x.toInt(), y.toInt())) {
            return false // 不在Activity的区域内，返回false，事件将被传递到后面的窗口
        }

        return super.dispatchTouchEvent(event) // 在Activity的区域内，正常处理触摸事件
    }

}